package com.shijie.sjoj.model.pojo.base;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.shijie.sjoj.model.base.BasePojo;
import com.shijie.sjoj.model.base.BaseValueEnumSerialize;
import lombok.extern.slf4j.Slf4j;

/**
 * 用户角色枚举类
 *
 * @author ZSJ
 */
@Slf4j
public enum Role implements BaseValueEnumSerialize<Role>, BasePojo {
    /**
     * 普通用户
     */
    User("User"),

    /**
     * 管理员用户
     */
    Admin("Admin"),

    /**
     * 默认的实例，应不作为DAO有效值
     */
    Default("N/A"),
    ;

    /**
     * 枚举对象（内部）值
     */
    private final String value;

    Role(String value) {
        this.value = value;
    }

    // 初始化
    static {
        BaseValueEnumSerialize.InheritDefInstanceRegister.register(Default);
    }

    @Override
    public Role defaultInstance() {
        return Default;
    }

    @Override
    public Role newInstance(String value) {
        return Role.of(value);
    }

    @JsonValue
    @Override
    public String getValue() {
        return this.value;
    }

    /**
     * 从字符串值推断枚举类型，
     * <pre>@JsonCreator 指定反序列化时使用的静态方法，枚举类型从Json反序列化的方法</pre>
     *
     * @return Status
     */
    @JsonCreator
    public static Role of(String value) {
        for (Role role : Role.values()) {
            if (role.value.equalsIgnoreCase(value)) {
                return role;
            }
        }
        log.error("从值获取枚举异常，没有该值的枚举：（Role）{}", value);
        return null;
    }


}
